DICTIONARY
	VROM_CODE		0x00A94000	// start of code within rom
	VROM_SS_STICK		E_16		// ovl_Effect_Ss_Stick is effect 16
	VROM_ARMS_HOOK		A_102		// Arms_Hook is actor 102
	VROM_OBJ		O_0x14		// object to overwrite

	HIERARCHY_CODE		0x00108D10	// Relative to the start of code;
						// Link's hierarchy pointer will
						// be written at this address

	SEG			0x06000000	// ram segment

	OBJ_BOY			0x0014		// object_link_boy object number

	// Hierarchy
	DL_WAIST		0x00EBE8	"Limb 1" // this is the name zzconvert automatically uses
	DL_RTHIGH		0x00F260	"Limb 3"
	DL_RSHIN		0x00F868	"Limb 4"
	DL_RFOOT		0x00FDE8	"Limb 5"
	DL_LTHIGH		0x010280	"Limb 6"
	DL_LSHIN		0x010898	"Limb 7"
	DL_LFOOT		0x010E18	"Limb 8"
	DL_HEAD			0x011D20	"Limb 10"
	DL_HAT			0x0126F8	"Limb 11"
	DL_COLLAR		0x012900	"Limb 12"
	DL_LSHOULDER		0x012D00	"Limb 13"
	DL_LFOREARM		0x013228	"Limb 14"
	DL_RSHOULDER		0x014868	"Limb 16"
	DL_RFOREARM		0x014D88	"Limb 17"
	DL_TORSO		0x016188	"Limb 20"

	// Hands
	DL_LHAND		0x013890	"Limb 15"
	DL_LFIST		0x013DF0	"Fist.L"
	DL_LHAND_BOTTLE		0x014310	"Bottle.Hand.L"
	DL_RHAND		0x0153C0	"Limb 18"
	DL_RFIST		0x015928	"Fist.R"

	// Items
	DL_SWORD_SHEATH	  	0x015D58	"Limb 19"
	DL_SWORD_HILT		0x0168E8	"Hilt.2"
	DL_SWORD_BLADE		0x016E48	"Blade.2"
	DL_LONGSWORD_HILT	0x017148	"Hilt.3"
	DL_LONGSWORD_BLADE	0x0174E0	"Blade.3"
	DL_LONGSWORD_BROKEN	0x017700	"Broken.Blade.3"
	DL_SHIELD_HYLIAN	0x018BC0	"Shield.2"
	DL_SHIELD_MIRROR	0x0190E8	"Shield.3"
	DL_HAMMER		0x0184A8	"Hammer"
	DL_BOTTLE		0x0188E8	"Bottle"
	DL_BOW			0x019810	"Bow"
	DL_OCARINA_TIME		0x019AE0	"Ocarina.2"
	DL_HOOKSHOT		0x019FC0	"Hookshot"

	// Flair
	DL_UPGRADE_LFOREARM	0x01D688	"Gauntlet.Forearm.L"
	DL_UPGRADE_LHAND	0x01D9A8	"Gauntlet.Hand.L"
	DL_UPGRADE_LFIST	0x01DD68	"Gauntlet.Fist.L"
	DL_UPGRADE_RFOREARM	0x01E048	"Gauntlet.Forearm.R"
	DL_UPGRADE_RHAND	0x01E368	"Gauntlet.Hand.R"
	DL_UPGRADE_RFIST	0x01E728	"Gauntlet.Fist.R"
	DL_BOOT_LIRON		0x01EB38	"Foot.2.L"
	DL_BOOT_RIRON		0x01EF50	"Foot.2.R"
	DL_BOOT_LHOVER		0x01F588	"Foot.3.L"
	DL_BOOT_RHOVER		0x01FC80	"Foot.3.R"

	// First Person
	DL_FPS_LFOREARM		0x01A9D8	"FPS.Forearm.L"
	DL_FPS_LHAND	   	0x01BAA0	"FPS.Hand.L"
	DL_FPS_RFOREARM		0x01C510	"FPS.Forearm.R"
	DL_FPS_RHAND	  	0x01D1C8	"FPS.Hand.R"
	DL_FPS_HOOKSHOT		0x020728	"FPS.Hookshot"

	// Misc
	DL_HOOKSHOT_CHAIN	0x020BA0	"Hookshot.Chain"
	DL_HOOKSHOT_HOOK	0x020D78	"Hookshot.Spike"
	DL_HOOKSHOT_AIM		0x020E58	"Hookshot.Aiming.Reticule"
	DL_BOW_STRING		0x020F20	"Bow.String"
	DL_BLADEBREAK		0x0212A0	"Blade.3.Break"
END

// Matrix function parameters:
// Matrix( XR, YR, ZR, XT, YT, ZT, XS, YS, ZS );

OBJECT
	MATRIX_SWORD_BACK:
		Matrix( 0, 0, 0, -715, -310, 78, 1, 1, 1 );

	MATRIX_SHIELD_BACK:
		Matrix( 0, 0, 180, 935, 94, 29, 1, 1, 1 );

	DL_SWORD_SHEATHED:
		CallMatrix( MATRIX_SWORD_BACK );
		CallList( DL_SWORD_HILT );
		PopMatrix( 1 );
		CallList( DL_SWORD_SHEATH );

	DL_SHIELD_HYLIAN_BACK:
		CallMatrix( MATRIX_SHIELD_BACK );
		CallList( DL_SHIELD_HYLIAN );

	DL_SHIELD_MIRROR_BACK:
		CallMatrix( MATRIX_SHIELD_BACK );
		CallList( DL_SHIELD_MIRROR );

	DL_SWORD_SHIELD_HYLIAN:
		CallList( DL_SWORD_SHEATHED );
		CallList( DL_SHIELD_HYLIAN_BACK );

	DL_SWORD_SHIELD_MIRROR:
		CallList( DL_SWORD_SHEATHED );
		CallList( DL_SHIELD_MIRROR_BACK );

	DL_SHEATH0_HYLIAN:
		CallList( DL_SWORD_SHEATH );
		CallList( DL_SHIELD_HYLIAN_BACK );

	DL_SHEATH0_MIRROR:
		CallList( DL_SWORD_SHEATH );
		CallList( DL_SHIELD_MIRROR_BACK );

	DL_LFIST_SWORD:
		CallList( DL_SWORD_HILT );
		CallList( DL_SWORD_BLADE );
		CallList( DL_LFIST );

	DL_LFIST_LONGSWORD:
		CallList( DL_LONGSWORD_HILT );
		CallList( DL_LONGSWORD_BLADE );
		CallList( DL_LFIST );

	DL_LFIST_LONGSWORD_BROKEN:
		CallList( DL_LONGSWORD_HILT );
		CallList( DL_LONGSWORD_BROKEN );
		CallList( DL_LFIST );

	DL_LFIST_HAMMER:
		CallList( DL_HAMMER );
		CallList( DL_LFIST );

	DL_RFIST_SHIELD_HYLIAN:
		CallList( DL_SHIELD_HYLIAN );
		CallList( DL_RFIST );

	DL_RFIST_SHIELD_MIRROR:
		CallList( DL_SHIELD_MIRROR );
		CallList( DL_RFIST );

	DL_RFIST_BOW:
		CallList( DL_BOW );
		CallList( DL_RFIST );

	DL_RFIST_HOOKSHOT:
		CallList( DL_HOOKSHOT );
		CallList( DL_RFIST );

	DL_RHAND_OCARINA_TIME:
		CallList( DL_OCARINA_TIME );
		CallList( DL_RHAND );

	DL_FPS_RHAND_BOW:
		CallList( DL_BOW );
		CallList( DL_FPS_RHAND );

	DL_FPS_LHAND_HOOKSHOT:
		CallList( DL_FPS_HOOKSHOT );
		CallList( DL_FPS_RHAND );
END

REPOINT
// code
	GoTo( VROM_CODE+0x00108E88 );
	SetAdvance( 8 );
		Write32( DL_RFIST );					//	Right Fist (High Poly)
		Write32( DL_RFIST );					//	Right Fist (Low Poly)
		Write32( DL_RFIST );					//	Right Fist + Deku Shield (High Poly)
		Write32( DL_RFIST );					//	Right Fist + Deku Shield (Low Poly)
		Write32( DL_RFIST_SHIELD_HYLIAN );		//	Right Fist + Hylian Shield (High Poly)
		Write32( DL_RFIST_SHIELD_HYLIAN );		//	Right Fist + Hylian Shield (Low Poly)
		Write32( DL_RFIST_SHIELD_MIRROR );		//	Right Fist + Mirror Shield (High Poly)
		Write32( DL_RFIST_SHIELD_MIRROR );		//	Right Fist + Mirror Shield (Low Poly)
		Write32( DL_SWORD_SHEATHED );			//	Sheathed Sword (High Poly)
		Write32( DL_SWORD_SHEATHED );			//	Sheathed Sword (Low Poly)
		Write32( DL_SWORD_SHEATHED );			//	Deku Shield + Sheathed Sword (High Poly)
		Write32( DL_SWORD_SHEATHED );			//	Deku Shield + Sheathed Sword (Low Poly)
		Write32( DL_SWORD_SHIELD_HYLIAN );		//	Hylian Shield + Sheathed Sword (High Poly)
		Write32( DL_SWORD_SHIELD_HYLIAN );		//	Hylian Shield + Sheathed Sword (Low Poly)
		Write32( DL_SWORD_SHIELD_MIRROR );		//	Mirror Shield + Sheathed Sword (High Poly)
		Write32( DL_SWORD_SHIELD_MIRROR );		//	Mirror Shield + Sheathed Sword (Low Poly)
		Write32( 0x00000000	 );					//	? (High Poly)
		Write32( 0x00000000 );					//	? (Low Poly)
		Write32( 0x00000000 );					//	Deku Shield without Sheath (High Poly)
		Write32( 0x00000000 );					//	Deku Shield without Sheath (Low Poly)
		Write32( DL_SWORD_SHEATH );				//	Sword Sheath (High Poly)
		Write32( DL_SWORD_SHEATH );				//	Sword Sheath (Low Poly)
		Write32( DL_SWORD_SHEATH );				//	Deku Shield + Sheath (High Poly)
		Write32( DL_SWORD_SHEATH );				//	Deku Shield + Sheath (Low Poly)
		Write32( DL_SHEATH0_HYLIAN );			//	Hylian Shield + Sheath (High Poly)
		Write32( DL_SHEATH0_HYLIAN );			//	Hylian Shield + Sheath (Low Poly)
		Write32( DL_SHEATH0_MIRROR );			//	Mirror Shield + Sheath (High Poly)
		Write32( DL_SHEATH0_MIRROR );			//	Mirror Shield + Sheath (Low Poly)
		Write32( 0x00000000 );					//	? (High Poly)
		Write32( 0x00000000 );					//	? (Low Poly)
		Write32( 0x00000000 );					//	? (High Poly)
		Write32( 0x00000000 );					//	? (Low Poly)
		Write32( DL_LFIST_LONGSWORD );			//	Left Fist + Biggoron Sword (High Poly)
		Write32( DL_LFIST_LONGSWORD );			//	Left Fist + Biggoron Sword (Low Poly)
		Write32( DL_LFIST_LONGSWORD_BROKEN );	//	Left Fist + Broken Giant's Knife (High Poly)
		Write32( DL_LFIST_LONGSWORD_BROKEN );	//	Left Fist + Broken Giant's Knife (Low Poly)
		Write32( DL_LHAND );					//	Left Hand (High Poly)
		Write32( DL_LHAND );					//	Left Hand (Low Poly)
		Write32( DL_LFIST );					//	Left Fist (High Poly)
		Write32( DL_LFIST );					//	Left Fist (Low Poly)
		Write32( DL_LFIST_SWORD );				//	Left Fist + Kokiri Sword (High Poly)
		Write32( DL_LFIST_SWORD );				//	Left Fist + Kokiri Sword (Low Poly)
		Write32( DL_LFIST_SWORD );				//	Left Fist + Master Sword (High Poly)
		Write32( DL_LFIST_SWORD );				//	Left Fist + Master Sword (Low Poly)
		Write32( DL_RHAND );					//	Right Hand (High Poly)
		Write32( DL_RHAND );					//	Right Hand (Low Poly)
		Write32( DL_RFIST );					//	Right Fist (High Poly)
		Write32( DL_RFIST );					//	Right Fist (Low Poly)
		Write32( DL_RFIST_BOW );				//	Right Fist + Fairy Bow (and/or Fairy Slinghot?) (High Poly)
		Write32( DL_RFIST_BOW );				//	Right Fist + Fairy Bow (and/or Fairy Slinghot?) (Low Poly)
		Write32( DL_SWORD_SHEATHED );			//	Sheathed Sword (High Poly)
		Write32( DL_SWORD_SHEATHED );			//	Sheathed Sword (Low Poly)
		Write32( DL_SWORD_SHEATH );				//	Sword Sheath (High Poly)
		Write32( DL_SWORD_SHEATH );				//	Sword Sheath (Low Poly)
		Write32( DL_WAIST );					//	Waist (High Poly)
		Write32( DL_WAIST );					//	Waist (Low Poly)
		Write32( DL_RFIST_BOW );				//	Right Fist + Fairy Bow (and/or Fairy Slinghot?) (High Poly)
		Write32( DL_RFIST_BOW );				//	Right Fist + Fairy Bow (and/or Fairy Slinghot?) (Low Poly)
		Write32( DL_RHAND_OCARINA_TIME );		//	Right Hand + Fairy Ocarina (High Poly)
		Write32( DL_RHAND_OCARINA_TIME );		//	Right Hand + Fairy Ocarina (Low Poly)
		Write32( DL_RHAND_OCARINA_TIME );		//	Right Hand + Ocarina of Time (High Poly)
		Write32( DL_RHAND_OCARINA_TIME );		//	Right Hand + Ocarina of Time (Low Poly)
		Write32( DL_RFIST_HOOKSHOT );			//	Right Fist + Hookshot / Longshot (High Poly)
		Write32( DL_RFIST_HOOKSHOT );			//	Right Fist + Hookshot / Longshot (Low Poly)
		Write32( DL_LFIST_HAMMER );				//	Left Fist + Megaton Hammer (High Poly)
		Write32( DL_LFIST_HAMMER );				//	Left Fist + Megaton Hammer (Low Poly)
		Write32( DL_LFIST );					//	Left Fist + Boomerang (High Poly)
		Write32( DL_LFIST );					//	Left Fist + Boomerang (Low Poly)
		Write32( DL_LHAND_BOTTLE );				//	Outstretched Left Hand for Holding Bottles (High Poly)
		Write32( DL_LHAND_BOTTLE );				//	Outstretched Left Hand for Holding Bottles (Low Poly)
		Write32( DL_FPS_LFOREARM );				//	FPS Left Forearm
		Write32( DL_FPS_LHAND );				//	FPS Left Hand
		Write32( DL_RSHOULDER );				//	Right Shoulder (High Poly)
		Write32( DL_FPS_RFOREARM );				//	FPS Right Forearm
		Write32( DL_FPS_RHAND_BOW );			//	FPS Right Hand + Fairy Bow

	GoTo( VROM_CODE+0x001091BC );
	SetAdvance( 4 );
		Write32( DL_BOOT_LIRON );				//	Left Iron Boot
		Write32( DL_BOOT_RIRON );				//	Right Iron Boot
		Write32( DL_BOOT_LHOVER );				//	Left Hover Boot
		Write32( DL_BOOT_RHOVER );				//	Right Hover Boot

	GoTo( VROM_CODE+0x00109298 );
		Write32( DL_BOTTLE );					//	Empty Bottle

	GoTo( VROM_CODE+0x001092D4 );
	SetAdvance( 4 );
		Write32( DL_BOW_STRING );				//	Fairy Bow String
		Float( 0.0 );					//	Fairy Bow String Anchor (X Position Float)
		Float( -360.4 );					//	Fairy Bow String Anchor (Y Position Float) 0xC3B43333

// Hardcoded Assembly Pointers
	GoTo( VROM_CODE+0x000728BE );				//	Left Silver/Golden Gauntlet Forearm
	Hi32( DL_UPGRADE_LFOREARM );
	GoTo( VROM_CODE+0x000728C2 );
	Lo32( DL_UPGRADE_LFOREARM );

	GoTo( VROM_CODE+0x000728DA );				//	Right Silver / Golden Gauntlet Forearm
	Hi32( DL_UPGRADE_RFOREARM );
	GoTo( VROM_CODE+0x000728DE );
	Lo32( DL_UPGRADE_RFOREARM );

	GoTo( VROM_CODE+0x000728FA );				//	Left Silver / Golden Gauntlet Hand (Fist)
	Hi32( DL_UPGRADE_LFIST );
	GoTo( VROM_CODE+0x0007290E );
	Lo32( DL_UPGRADE_LFIST );

	GoTo( VROM_CODE+0x00072912 );				//	Left Silver / Golden Gauntlet Hand (Open Hand)
	Hi32( DL_UPGRADE_LHAND );
	GoTo( VROM_CODE+0x0007291E );
	Lo32( DL_UPGRADE_LHAND );

	GoTo( VROM_CODE+0x0007294A );				//	Right Silver / Golden Gauntlet Hand (Fist)
	Hi32( DL_UPGRADE_RFIST );
	GoTo( VROM_CODE+0x0007294E );
	Lo32( DL_UPGRADE_RFIST );

	GoTo( VROM_CODE+0x0007295A );				//	Right Silver / Golden Gauntlet Hand (Open Hand)
	Hi32( DL_UPGRADE_RHAND );
	GoTo( VROM_CODE+0x0007295E );
	Lo32( DL_UPGRADE_RHAND );

	GoTo( VROM_CODE+0x0007359A );				//	FPS Right Hand + FPS Hookshot / Longshot
	Hi32( DL_FPS_LHAND_HOOKSHOT );
	GoTo( VROM_CODE+0x0007359E );
	Lo32( DL_FPS_LHAND_HOOKSHOT );

	GoTo( VROM_CODE+0x00073E56 );				//	Hookshot / Longshot Aiming Reticle
	Hi32( DL_HOOKSHOT_AIM );
	GoTo( VROM_CODE+0x00073E5E );
	Lo32( DL_HOOKSHOT_AIM );

// Arms_Hook
	GoTo( VROM_ARMS_HOOK+0x00000A6E );			//	Hookshot / Longshot Spike
	Hi32( DL_HOOKSHOT_HOOK );
	GoTo( VROM_ARMS_HOOK+0x00000A72 );
	Lo32( DL_HOOKSHOT_HOOK );

	GoTo( VROM_ARMS_HOOK+0x00000B8A );			//	Hookshot / Longshot Chain
	Hi32( DL_HOOKSHOT_CHAIN );
	GoTo( VROM_ARMS_HOOK+0x00000B8E );
	Lo32( DL_HOOKSHOT_CHAIN );

	GoTo( VROM_ARMS_HOOK+0x00000BE8 );			//	Hookshot / Longshot Object File
	Write16( OBJ_BOY );

// ovl_Effect_Ss_Stick
	GoTo( VROM_SS_STICK+0x0000035C );			//	Broken Piece of Giant's Knife
	Write32( DL_BLADEBREAK );

	GoTo( VROM_SS_STICK+0x00000358 );			//	Giant's Knife / Biggoron Sword Object File
	Write16( OBJ_BOY );
END
